<?php

namespace app\admin\model;

use think\Model;


class Order extends Model
{

    // 表名
    protected $name = 'order';

    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    // 定义时间戳字段名
    protected $createTime = false;
    protected $updateTime = false;
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'add_time_text',
        'pay_time_text'
    ];

    //status 0 未支付 1 已预定（支付） 2 已入住（支付,待退房状态）3 已完成（支付后，退房，房间回归打扫）  4 已取消（未付款，未住，30分钟后，自动取消房间预定，回归空闲，或者后台管理员手动取消，前台用户手动取消） 5支付失败（房间回归空闲）
    //refund_status 0 默认 1 抵消房费(无需退款）2 申请退款 3 已退款 4退款失败

    //进行中：预定、入住两种 status = 1 and refund_status = 0 || status = 2 and refund_status = 0

    //未支付：未支付、支付失败 status = 0 || status = 5 || (未支付订单的取消) status = 4  and refund_status = 0

    //已完成：入住  status = 3 and refund_status = 3 || status = 3 and refund_status = 1 || status = 3 and refund_status = 0

    //退款：预定 status = 1 and refund_status = 2 || status = 1 and refund_status = 4
    //           status = 4 and refund_status = 1 || status = 4 and refund_status  = 4

    //全部：所有订单
    public function getStatusList(){
        return ['20'=>__('进行中'),'21'=>__('已完成'),'22'=>__('退款'),'23'=>__('未支付'),'30'=>__('全部')];
      //  return ['1'=>__('已支付(预定)'),'2'=>__('已支付(入住'),'3'=>__('已完成'),'10'=>__('未支付'),'4'=>__('已取消'),'5'=>__('支付失败')];
    }

    //全部：所有订单
    public function getStatusList2(){
        //return ['0'=>__('进行中'),'21'=>__('已完成'),'22'=>__('退款'),'23'=>__('未支付'),'30'=>__('全部')];
         return ['1'=>__('预定'),'2'=>__('入住'),'3'=>__('已完成'),'10'=>__('未支付'),'4'=>__('已取消'),'5'=>__('支付失败')];
    }

    public function getStatusTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['pay_status']) ? $data['pay_status'] : '');
        $list = $this->getStatusList();
        return isset($list[$value]) ? $list[$value] : '';
    }


    public function getRefundStatusList(){
        return ['0'=>__('RefundStatus0'),'1'=>__('RefundStatus1'),'2'=>__('RefundStatus2'),'3'=>__('RefundStatus3')];
    }


    public function getAddTimeTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['add_time']) ? $data['add_time'] : '');
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }


    public function getPayTimeTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['pay_time']) ? $data['pay_time'] : '');
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }

    protected function setAddTimeAttr($value)
    {
        return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
    }

    protected function setPayTimeAttr($value)
    {
        return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
    }


    public function house()
    {
        return $this->belongsTo('House', 'room_id', 'id', [], 'LEFT')->setEagerlyType(0);
    }

    public function hotel()
    {
        return $this->belongsTo('Hotels', 'hotelid', 'hid', [], 'LEFT')->setEagerlyType(0);
    }

    public function user()
    {
        return $this->belongsTo('User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
    }
}
